package com.huang.gateway.utils;

import org.springframework.http.server.reactive.ServerHttpRequest;

/**
 * @author HuangShen
 * @Description
 * @create 2021-10-17 21:54
 */
public class OsAndBrowserInfoUtil {
    /**
     * 获取操作系统,浏览器及浏览器版本信息
     *
     * @param serverHttpRequest serverHttpRequest
     * @return os
     */
    public static String getOsInfo(ServerHttpRequest serverHttpRequest) {
        String userAgent = serverHttpRequest.getHeaders().getFirst("User-Agent");
        String os = "";

        //=================OS Info=======================
        if (userAgent.toLowerCase().contains("windows nt 5.0")) {
            os = "Windows 2000";
        } else if (userAgent.toLowerCase().contains("windows nt 5.1")) {
            os = "Windows XP";
        } else if (userAgent.toLowerCase().contains("windows nt 5.2")) {
            os = "Windows 2003";
        } else if (userAgent.toLowerCase().contains("windows nt 6.0")) {
            os = "Windows Vista";
        } else if (userAgent.toLowerCase().contains("windows nt 6.1")) {
            os = "Windows 7";
        } else if (userAgent.toLowerCase().contains("windows nt 10")) {
            os = "Windows 10";
        } else if (userAgent.toLowerCase().contains("windows nt 11")) {
            os = "Windows 11";
        } else if (userAgent.toLowerCase().contains("mac")) {
            os = "Mac";
        } else if (userAgent.toLowerCase().contains("x11")) {
            os = "Unix";
        } else if (userAgent.toLowerCase().contains("android")) {
            os = "Android";
        } else if (userAgent.toLowerCase().contains("iphone")) {
            os = "IPhone";
        } else {
            os = "未知设备";
        }


        return os;
    }


    /**
     * 获取浏览器及浏览器版本信息
     *
     * @param serverHttpRequest serverHttpRequest
     * @return browser
     */
    public static String getBrowserInfo(ServerHttpRequest serverHttpRequest) {
        String userAgent = serverHttpRequest.getHeaders().getFirst("User-Agent");
        String user = userAgent.toLowerCase();

        String browser = "";
        //===============Browser===========================
        if (user.contains("edge")) {
            browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
        } else if (user.contains("msie")) {
            String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
            browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1];
        } else {
            String[] split = userAgent.substring(userAgent.indexOf("Version")).split(" ");
            if (user.contains("safari") && user.contains("version")) {
                browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
                        + "-" + (split[0]).split("/")[1];
            } else if (user.contains("opr") || user.contains("opera")) {
                if (user.contains("opera")) {
                    browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
                            + "-" + (split[0]).split("/")[1];
                } else if (user.contains("opr")) {
                    browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
                            .replace("OPR", "Opera");
                }

            } else if (user.contains("chrome")) {
                browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
            } else if ((user.contains("mozilla/7.0")) || (user.contains("netscape6")) ||
                    (user.contains("mozilla/4.7")) || (!user.contains("mozilla/4.78")) ||
                    (user.contains("mozilla/4.08")) || (user.contains("mozilla/3"))) {
                browser = "Netscape-?";

            } else if (user.contains("firefox")) {
                browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
            } else if (user.contains("rv")) {
                String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
                browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1);
            } else {
                browser = "UnKnown, More-Info: " + userAgent;
            }
        }

        return browser;
    }


}
